package org.example.day12;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 5.1.2.1 方法schedule(TimerTask task,Date firstTime, long period)
 *      ①执行时间在未来,等 (nextExecuteTime-currentTime)后开始执行.
 *      ②执行时间在过去,则直接执行.
 *      ③ ★ timer.schedule(task,dateRef1,4000);  如果用户自定义的任务执行时间为5秒, 则下一次的执行时间间隔为5秒.
 *      ☆注意: schedule() 重复任务是在当前时间的基础上确定下一次的执行时间，如果用户定义的逻辑任务时间很长，则下一次的执行时间是在执行完用户定义的run方法后
 *      确定当前时间，然后再根据current + period = nextExecuteTime.
 */
public class MyThread10 {
    static public class MyTask extends TimerTask{
        @Override
        public void run() {
            System.out.println("MyTask 运行了! 时间为: " + new Date());
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        try {
            MyTask task = new MyTask();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateString1 = "2022-05-16 11:09:00";
            Timer timer = new Timer();
            Date dateRef1 = sdf.parse(dateString1);
            System.out.println("字符串1时间: " + dateRef1.toLocaleString() + " 当前时间: " + new Date().toLocaleString());
            timer.schedule(task,dateRef1,4000);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
